package br.unicamp.ic.inf300.arena.modelo.pessoa;

import java.util.Date;

public class Funcionario extends Pessoa {
	
	private String departamento;
	
	public Funcionario() {
		super();
		super.setTipoPessoa(TipoPessoa.ESPECTADOR_FUNCIONARIO);
	}

	/**
	 * 
	 * @param documento
	 * @param depto
	 */
	public Funcionario(String documento, String depto) {
		super(documento);
		super.setTipoPessoa(TipoPessoa.ESPECTADOR_FUNCIONARIO);
		this.departamento = depto;
	}

	/**
	 * 
	 * @param dataNascimento
	 * @param documento
	 * @param nome
	 * @param depto
	 */
	public Funcionario(Date dataNascimento, String documento, String nome,
			String depto) {
		super(dataNascimento, documento, nome);
		super.setTipoPessoa(TipoPessoa.ESPECTADOR_FUNCIONARIO);
		this.departamento = depto;
	}
	
	public Funcionario(Pessoa pessoa, String departamento) {
		super(pessoa);
		setDepartamento(departamento);
	}
	
	public Funcionario(Funcionario funcionario) {
		this(funcionario, funcionario.getDepartamento());
	}

	public String getDepartamento() {
		return departamento;
	}

	public void setDepartamento(String departamento) {
		this.departamento = departamento;
	}

	/**
	 * @return <code>String</code>
	 * JUtils plugin ;-)
	 */
	public String toString()
	{
	    final String TAB = "    ";
	    
	    StringBuffer retValue = new StringBuffer();
	    
	    retValue.append("Funcionario ( ")
	        .append(super.toString()).append(TAB)
	        .append("departamento = ").append(this.departamento).append(TAB)
	        .append(" )");
	    
	    return retValue.toString();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result
				+ ((departamento == null) ? 0 : departamento.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Funcionario other = (Funcionario) obj;
		if (departamento == null) {
			if (other.departamento != null)
				return false;
		} else if (!departamento.equals(other.departamento))
			return false;
		return true;
	}
}